<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<!--
const 声明数组 const arr = [1,2,3,4,5];
数组不是常量 关键字 const 不定义常量数组,它定义的是对数组的常量引用,但是仍然可以更改常量数组的元素
声明时赋值 js const变量在声明时必须赋值: 意思是用 const 声明的数组必须在声明时进行初始化,使用 const 而不初始化数组是一个语法错误
const cars;
cars = ["Saab", "Volvo", "BMW"];
不起作用

cars = ["Saab", "Volvo", "BMW"];
var cars;
没问题

const 块作用域 声明的数组具有块作用域 在块中声明的数组与在块外声明的数组不同
重新声明数组 在程序的任何位置都允许用var 重新声明数组
var cars = ["Volvo", "BMW"];   // 允许
var cars = ["Toyota", "BMW"];  // 允许
cars = ["Volvo", "Saab"];      // 允许
不允许在同一作用域或同一块中将数组重新声明或重新赋值 给const
var cars = ["Volvo", "BMW"];         // 允许
const cars = ["Volvo", "BMW"];       // 不允许
{
  var cars = ["Volvo", "BMW"];         // 允许
  const cars = ["Volvo", "BMW"];       // 不允许
}
不允许在同一作用域或同一块中重新声明或重新赋值现有的 const 数组：
const cars = ["Volvo", "BMW"];       // 允许
const cars = ["Volvo", "BMW"];       // 不允许
var cars = ["Volvo", "BMW"];         // 不允许
cars = ["Volvo", "BMW"];             // 不允许

{
  const cars = ["Volvo", "BMW"];     // 允许
  const cars = ["Volvo", "BMW"];     // 不允许
  var cars = ["Volvo", "BMW"];       // 不允许
  cars = ["Volvo", "BMW"];           // 不允许
}
允许在另一个作用域或另一个块中使用 const 重新声明数组：

js 日期
默认情况下 js将使用浏览器的时区并将日期显示为全文本字符串
Mon Jul 15 2024 10:52:19 GMT+0800 (中国标准时间)

创建 Date 对象
Date 对象由新的 Date() 构造函数创建
new Date()
  用当前日期和时间创建新的日期对象
new Date(year, month, day, hours, minutes, seconds, milliseconds)
  用指定日期和时间创建新的日期对象
  7个数字分别指定 年、月、日、时、分、秒和毫秒

new Date(milliseconds)
   2个数字指定年份和月份 不能省略 如果只提供一个参数,则将其视为毫秒
   var d = new Date(2024);

new Date(dateString)
  从日期字符串创建一个新的日期对象
  var d = new Date("October 13, 2014 11:13:00");

js 将日期存储为毫秒
js 将日期存储为 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来的毫秒数
零时间是 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)
现在的时间是 2024 年 7 月 15 日 10:52:19 UTC(协调世界时)

日期方法
创建Date 对象 可以使用许多方法对其进行操作

显示日期
js默认情况下 将以全文本字符串格式输出日期
Wed Mar 25 2015 08:00:00 GMT+0800 (中国标准时间)
在HTML 中显示日期对象时,会使用 toString() 方法自动转换为字符串.

d = new Date();
document.getElementById("demo").innerHTML = d;
等同于
document.getElementById("demo").innerHTML = d.toString();

toUTCString() 方法将日期转换为 UTC 字符串 一种日期显示标准
toDateString() 方法将日期转换为更易读的格式

js 日期输入格式
ISO日期  "2018-02-19" （国际标准）
短日期  "02/19/2018"
长日期  "February 19, 2018"
完整日期  "February 19, 2018 08:30:00"

时区 在设置日期时,如果不规定时区,则js会使用浏览器的时区
当获取日期时,如果不规定时区,则js会使用浏览器的时区
某些浏览器中如果不带前导零的月或其会产生错误
var d = new Date("2015-03-25");

长日期 通常以 "MMM DD YYYY" 这样的语法来写
var d = new Date("19 Feb 2018");

日期获取方法
获取方法用于获取日期的某个部分 来自日期对象的信息
getDate()	以数值返回天（1-31）
getDay()	以数值获取周名（0-6）
getFullYear()	获取四位的年（yyyy）
getHours()	获取小时（0-23）
getMilliseconds()	获取毫秒（0-999）
getMinutes()	获取分（0-59）
getMonth()	获取月（0-11）
getSeconds()	获取秒（0-59）
getTime()	获取时间（从 1970 年 1 月 1 日至今）

UTC 日期方法 用于处理UTC日期
getUTCDate()	等于 getDate()，但返回 UTC 日期
getUTCDay()	等于 getDay()，但返回 UTC 日
getUTCFullYear()	等于 getFullYear()，但返回 UTC 年
getUTCHours()	等于 getHours()，但返回 UTC 小时
getUTCMilliseconds()	等于 getMilliseconds()，但返回 UTC 毫秒
getUTCMinutes()	等于 getMinutes()，但返回 UTC 分
getUTCMonth()	等于 getMonth()，但返回 UTC 月
getUTCSeconds()	等于 getSeconds()，但返回 UTC 秒

使用 设置日期 方法可以设置 日期对象的日期值 年月日 时分秒毫秒
setDate()	以数值（1-31）设置日
setFullYear()	设置年（可选月和日）
setHours()	设置小时（0-23）
setMilliseconds()	设置毫秒（0-999）
setMinutes()	设置分（0-59）
setMonth()	设置月（0-11）
setSeconds()	设置秒（0-59）
setTime()	设置时间（从 1970 年 1 月 1 日至今的毫秒数）

日期设置方法
setDate()	以数值（1-31）设置日
setFullYear()	设置年（可选月和日）
setHours()	设置小时（0-23）
setMilliseconds()	设置毫秒（0-999）
setMinutes()	设置分（0-59）
setMonth()	设置月（0-11）
setSeconds()	设置秒（0-59）
setTime()	设置时间（从 1970 年 1 月 1 日至今的毫秒数）


js 数学 使用 Math对象允许执行数学运算
Math.round(x)	返回 x 的最接近的整数
Math 属性常量 math对象访问的8个数字常量
Math.E          // 返回欧拉指数（Euler's number）
Math.PI         // 返回圆周率（PI）
Math.SQRT2      // 返回 2 的平方根
Math.SQRT1_2    // 返回 1/2 的平方根
Math.LN2        // 返回 2 的自然对数
Math.LN10       // 返回 10 的自然对数
Math.LOG2E      // 返回以 2 为底的 e 的对数（约等于 1.414）
Math.LOG10E     // 返回以 10 为底的 e 的对数（约等于 0.434）

math 构造器 与其他全局对象不同,math对象没有构造函数.方法和属性都是静态的.
js 随机数 Math.random() 返回介于0到1之间的随机数
js 逻辑 代表两个值之一 true 或 false
布尔值 js提供一种布尔数据类型 只接受true或false

Boolean()	返回布尔值
比较和条件
== 等于 if(day == "Monday")
> 大于 if(salary>9000)
< 小于 if(age<18)

所有具有真实值 即为 True
100
3.14
-15
"Hello"
"false"
7 + 1 + 3.14
5 < 6

所有不具有"真实"值的即为 False
0 零 的布尔值 为 false
-0 负零 的布尔值 为 false
"" 空字符串 的布尔值 为 false
undefined 未定义 的布尔值 为 false
null 未定义 的布尔值 为 false
false 的布尔值 为 false
NaN 的布尔值 为 false
  var x = 10/ "H";
  Boolean(x) // 返回false

布尔可以是对象
var x = false
但是布尔也可以通过 关键词 new作为对象来定义
var y = new Boolean(false);



-->
<body>
<h5>数组</h5>
<p id="demo"></p>
<h5>改变数组</h5>
<p id="demo1"></p>
<h5>块作用域</h5>
<p id="demo2"></p>
<h5>日期</h5>
<p id="demo3"></p>
<p id="demo4"></p>
<p id="demo5"></p>
<p id="demo6"></p>
<p id="demo7"></p>
<p id="demo8"></p>
<p id="demo9"></p>
<p id="demo10"></p>
<p id="demo11"></p>
<p id="demo12"></p>
<p id="demo13"></p>
<p id="demo14"></p>
<p id="demo15"></p>
<p id="demo16"></p>
<p id="demo17"></p>
<p id="demo18"></p>
<p id="demo19"></p>

<p>Math.PI 返回圆周长与直径的比率:</p>
<p id="demo20"></p>

<p>返回值是x 四舍五入为最接近的整数值:</p>
<p id="demo21"></p>

<p>pow(x,y)返回值是x的y次幂:</p>
<p id="demo22"></p>

<p>math.sqrt() 返回 x 的平方根:</p>
<p id="demo23"></p>

<p>abs() 返回 x 的绝对值:</p>
<p id="demo24"></p>

<p>ceil() 返回值是x 上舍入最接近的整数:</p>
<p id="demo25"></p>

<p>floor() 返回值是x 下舍入最接近的整数:</p>
<p id="demo26"></p>

<p>Math.min() 和 Math.max() 用于查找参数列表中的最低或最高值:</p>
<p id="demo27"></p>
<p id="demo28"></p>

<p>random()返回介于0包括与1不包括之间的随机数:</p>
<p id="demo29"></p>

<p>js随机整数:</p>
<p id="demo30"></p>
<p id="demo31"></p>
<p id="demo32"></p>
<p id="demo33"></p>
<p id="demo34"></p>

<p>随机函数:创建一个随机函数用于生成所有随机整数是,返回介于min和max之间:</p>
<p>点击按钮,随机返回1与10之间的随机数:</p>
<button onclick="document.getElementById('demo35').innerHTML=getRndInteger(1,10)">点击我</button>
<p id="demo35"></p>

<p>显示 Boolean(10>9) 的值 返回布尔值:</p>
<button onclick="myFunction()">试一试</button>
<p id="demo36"></p>

<p>显示0 的布尔值:</p>
<button onclick="myFunction1()">试一试</button>
<p id="demo37"></p>

<p>永远不要将布尔值创建为对象</p>
<p id="demo38"></p>
<p id="demo39"></p>

<script>
  var x = false; // x 是布尔值
  var y = new Boolean(false); // y 是对象
  document.getElementById("demo38").innerHTML = typeof x + "<br>" + typeof y;
  document.getElementById("demo39").innerHTML = (x===y);

  function myFunction1() {
    // var x = -0;
    var x = "";
    document.getElementById("demo37").innerHTML = Boolean(x);
  }

  function myFunction() {
    document.getElementById("demo36").innerHTML = Boolean(10 > 9);
  }

  function getRndInteger(min, max) {
    return Math.floor(Math.random() * (max - min + 1) ) + min;
  }
  document.getElementById("demo20").innerHTML = Math.PI;
  // 返回值是x 四舍五入为最接近的整数值:
  document.getElementById("demo21").innerHTML = Math.round(4.7);

  // pow(x,y)返回值是x的y次幂:
  document.getElementById("demo22").innerHTML = Math.pow(8,3);

  // math.sqrt() 返回 x 的平方根:
  document.getElementById("demo23").innerHTML = Math.sqrt(64);

  // abs() 返回 x 的绝对值:
  document.getElementById("demo24").innerHTML = Math.abs(-4.7);

  // ceil() 返回值是x 上舍入最接近的整数:
  document.getElementById("demo25").innerHTML = Math.ceil(6.4);

  // floor() 返回值是x 下舍入最接近的整数:
  document.getElementById("demo26").innerHTML = Math.floor(4.7);

  // Math.min() 和 Math.max() 用于查找参数列表中的最低或最高值:
  document.getElementById("demo27").innerHTML = Math.min(0, 150, 30, 20, -8, -200);
  document.getElementById("demo28").innerHTML = Math.max(0, 150, 30, 20, -8, -200);

  // random()返回介于0包括与1不包括之间的随机数:
  document.getElementById("demo29").innerHTML = Math.random();

  // js 随机整数:
  document.getElementById("demo30").innerHTML = Math.random();
  // 返回 0 到 9 之间的随机整数
  document.getElementById("demo31").innerHTML = Math.floor(Math.random()*11);
  // 返回 0 到 100 之间的数
  document.getElementById("demo32").innerHTML = Math.floor(Math.random()*101);
  // 返回 1 至 10 之间的数
  document.getElementById("demo33").innerHTML = Math.floor(Math.random()*10)+1;
  // 返回 1 至 100 之间的数
  document.getElementById("demo34").innerHTML = Math.floor(Math.random()*100)+1;



  try {
    const cars = ["Safari", "Firefox", "Chrome"];
    cars = ["Opera", "Safari", "Firefox"];
  }
  catch (err){
    document.getElementById("demo").innerHTML = err;
  }
  // 创建数组
  const cars1 = ["Tesla","Safari", "Firefox", "Chrome"];
  // 修改元素
  cars1[0] = "Opera";
  // 显示数组
  cars1.push("Audi");
  document.getElementById("demo1").innerHTML = cars1;
  {
    // 此处cars1[0] 是 Toyota
    const cars1 = ["Toyota","Safari", "Firefox", "Chrome"];
  }
  document.getElementById("demo2").innerHTML = cars1[0];
  var d = new Date();
  document.getElementById("demo3").innerHTML = d;
  document.getElementById("demo4").innerHTML = d.toDateString();
  // 计算的日期相对于您的时区
  var d1 = new Date("2024-07-02");
  document.getElementById("demo5").innerHTML = d1;
  // 写日期也可以不规定具体某日 (YYYY-MM)
  var d2 = new Date("2024-07");
  document.getElementById("demo6").innerHTML = d2;
  var d3 = new Date("02/19/2018");
  document.getElementById("demo7").innerHTML = d3;
  var d4 = new Date("19 Feb 2018");
  document.getElementById("demo8").innerHTML = d4;
  var d5 = new Date();
  // getTime() 方法返回1970年1月1日0时0分0秒和当前日期之间的毫秒数
  document.getElementById("demo9").innerHTML = d5.getTime();
  // getFullYear() 方法以四位数字形式返回日期年份
  document.getElementById("demo10").innerHTML = d5.getFullYear();
  // getMonth() 方法以数字形式返回日期月份 以数字 0-11 返回日期的月份
  document.getElementById("demo11").innerHTML = d5.getMonth();
  // 以名称数组 并使用getMonth() 方法返回月份名称
  var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  document.getElementById("demo12").innerHTML = months[d.getMonth()];
  // getDate() 方法以数字形式返回日期 以数字 1-31 返回日期的天数
  document.getElementById("demo13").innerHTML = d.getDate();
  // getMinutes() 方法 以数字0-59 返回日期的分钟数
  document.getElementById("demo14").innerHTML = d.getMinutes();
  // getSeconds() 方法 以数字0-59 返回日期的秒数
  document.getElementById("demo15").innerHTML = d.getSeconds();
  // getMilliseconds() 方法 以数字0-999 返回日期的毫秒数
  document.getElementById("demo16").innerHTML = d.getMilliseconds();
  // getDay() 方法 以数字0-6 返回日期的星期数
  // document.getElementById("demo17").innerHTML = d.getDay();
  var days = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
  document.getElementById("demo17").innerHTML = days[d.getDay()];

  // setFullYear() 方法设置日期对象的年份
  d.setFullYear(2020);
  document.getElementById("demo18").innerHTML = d;

  // setFullYear() 方法可以选择设置月和日
  d.setFullYear(2020, 10, 1);
  document.getElementById("demo18").innerHTML = d;

  // 使用日期和特定日期进行比较
  var today,someday,text;
  today = new Date();
  someday = new Date();
  someday.setFullYear(2049, 10, 11);
  if (someday>today) {
    text = "今天在2049年10月11日之前";
  }else {
    text = "今天在2049年10月11日之后";
   }
  document.getElementById("demo19").innerHTML = text;

</script>
</body>
</html>
